]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shell-app: Unref running state when window count drops to zero
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 23 Jan 2014 16:51:44 +0000 (11:51 -0500)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 23 Jan 2014 17:45:23 +0000 (12:45 -0500)
With the lastest ShellApp changes, an app is considered stopped
when the last "interesting" window is closed. However the app
may still track non-interesting windows, so if we unref the
running state on the state transition, we hit an assertion later-on
when trying to remove the non-interesting window.
Fix this by keeping the running state around until the last window
is closed.

https://bugzilla.gnome.org/show_bug.cgi?id=722840

src/shell-app.c

index 83b96c1449c7137e0de6142bbb64cce401e3aef2..9dabeba88254005c7dc59deeb8e2930c0bb95d14 100644 (file)
@@ -891,12 +891,6 @@ shell_app_state_transition (ShellApp      *app,
                       state == SHELL_APP_STATE_STARTING));
   app->state = state;
 
-  if (app->state == SHELL_APP_STATE_STOPPED && app->running_state)
-    {
-      unref_running_state (app->running_state);
-      app->running_state = NULL;
-    }
-
   _shell_app_system_notify_app_state_changed (shell_app_system_get_default (), app);
 
   g_object_notify (G_OBJECT (app), "state");
@@ -1058,6 +1052,9 @@ _shell_app_remove_window (ShellApp   *app,
   if (app->running_state->interesting_windows == 0)
     shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
 
+  if (app->running_state && app->running_state->windows == NULL)
+    g_clear_pointer (&app->running_state, unref_running_state);
+
   g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
 }